home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Przegladarki internetowe / Mozilla Seamonkey 1.0.5 pl / seamonkey-1.0.5.pl-PL.win32.installer.exe / MAIL.XPI / bin / chrome / messenger.jar / content / messenger / msgViewPickerOverlay.js < prev    next >
Encoding:
Text File  |  2005-08-24  |  10.4 KB  |  323 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is mozilla.org Code.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 2002
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *   Scott MacGregor <mscott@netscape.com>
  24.  *   Seth Spitzer <sspitzer@netscape.com>
  25.  *
  26.  * Alternatively, the contents of this file may be used under the terms of
  27.  * either of the GNU General Public License Version 2 or later (the "GPL"),
  28.  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  29.  * in which case the provisions of the GPL or the LGPL are applicable instead
  30.  * of those above. If you wish to allow use of your version of this file only
  31.  * under the terms of either the GPL or the LGPL, and not to allow others to
  32.  * use your version of this file under the terms of the MPL, indicate your
  33.  * decision by deleting the provisions above and replace them with the notice
  34.  * and other provisions required by the GPL or the LGPL. If you do not delete
  35.  * the provisions above, a recipient may use your version of this file under
  36.  * the terms of any one of the MPL, the GPL or the LGPL.
  37.  *
  38.  * ***** END LICENSE BLOCK ***** */
  39.  
  40. const kLabelOffset = 1;  // 1=2-1, from msgViewPickerOveraly.xul, <menuitem value="2" id="labelMenuItem1"/>
  41. const kLastDefaultViewIndex = 9;  // 9, because 8 + 1, <menuitem id="createCustomView" value="8" label="&viewPickerCustomView.label;"/>
  42. const kSaveItemValue = "7"; // from msgViewPickerOveraly.xul, <menuitem id="saveAsVirtualFolder" value="7" label="&viewPickerSaveAsVirtualFolder.label;"/>
  43. const kCustomItemValue = "8"; // from msgViewPickerOveraly.xul, <menuitem id="createCustomView" value="8" label="&viewPickerCustomView.label;"/>
  44.  
  45. var gMailViewList = null;
  46. var gCurrentViewValue = "0"; // initialize to the first view ("All")
  47. var gCurrentViewLabel = "";
  48. var gSaveDefaultSVTerms;
  49.  
  50. var nsMsgSearchScope = Components.interfaces.nsMsgSearchScope;
  51. var nsMsgSearchAttrib = Components.interfaces.nsMsgSearchAttrib;
  52. var nsMsgSearchOp = Components.interfaces.nsMsgSearchOp;
  53.  
  54. // when the item in the list box changes....
  55.  
  56. function viewChange(aMenuList, val)
  57. {
  58.   if (val == kCustomItemValue || val == kSaveItemValue)
  59.   {
  60.     // restore to the previous view value, in case they cancel
  61.     aMenuList.value = gCurrentViewValue;
  62.     if (val == kCustomItemValue)
  63.       LaunchCustomizeDialog();
  64.     else
  65.       openNewVirtualFolderDialogWithArgs(gCurrentViewLabel, gSaveDefaultSVTerms);
  66.     return;
  67.   }
  68.  
  69.   // bail out early if the user picked the same view
  70.   if (val == gCurrentViewValue)
  71.     return; 
  72.   viewDebug("viewChange to " + val + "\n");
  73.   gCurrentViewValue = val;
  74.   switch (val)
  75.   {
  76.    case -1:
  77.    case "-1":
  78.    case "0": // View All
  79.      gDefaultSearchViewTerms = null;
  80.      break;
  81.    case "1": // Unread
  82.      ViewNewMail();
  83.      break;
  84.    case "2": // label 1
  85.    case "3": // label 2
  86.    case "4": // label 3
  87.    case "5": // label 4
  88.    case "6": // label 5
  89.      ViewLabel(parseInt(val) - kLabelOffset);
  90.      break;
  91.    default:
  92.      LoadCustomMailView(parseInt(val) - kLastDefaultViewIndex);
  93.      break;
  94.   } //      
  95.  
  96.   gSaveDefaultSVTerms = gDefaultSearchViewTerms;
  97.   // store this, to persist across sessions
  98.   if (val != "-1" && val != -1)
  99.   {
  100.     if (aMenuList.selectedItem)
  101.       gCurrentViewLabel = aMenuList.selectedItem.label;
  102.  
  103.     var msgDatabase = GetFirstSelectedMsgFolder().getMsgDatabase(msgWindow);
  104.     var dbFolderInfo = msgDatabase.dBFolderInfo; 
  105.     dbFolderInfo.setUint32Property("current-view", parseInt(val));
  106.   }
  107.   // if we're switching to -1 (virtual folder), don't do a search 
  108.   if (val != "-1" && val != -1)
  109.   {
  110.     onEnterInSearchBar();
  111.     gQSViewIsDirty = true;
  112.   }
  113. }
  114.  
  115. const kLabelPrefs = "mailnews.labels.description.";
  116.  
  117. const gLabelPrefListener = {
  118.   observe: function(subject, topic, prefName)
  119.   {
  120.     if (topic != "nsPref:changed")
  121.       return;
  122.  
  123.     var index = parseInt(prefName.substring(kLabelPrefs.length));
  124.     if (index >= 1 && index <= 5)
  125.       setLabelAttributes(index, "labelMenuItem" + index);
  126.   }
  127. };
  128.  
  129. function AddLabelPrefListener()
  130. {
  131.   try {
  132.     gPrefBranch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  133.     gPrefBranch.addObserver(kLabelPrefs, gLabelPrefListener, false);
  134.   } catch(ex) {
  135.     dump("Failed to observe prefs: " + ex + "\n");
  136.   }
  137. }
  138.  
  139. function RemoveLabelPrefListener()
  140. {
  141.   try {
  142.     gPrefBranch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  143.     gPrefBranch.removeObserver(kLabelPrefs, gLabelPrefListener);
  144.   } catch(ex) {
  145.     dump("Failed to remove pref observer: " + ex + "\n");
  146.   }
  147. }
  148.  
  149. function viewPickerOnLoad()
  150. {
  151.   if (document.getElementById('viewPicker')) {
  152.     window.addEventListener("unload", RemoveLabelPrefListener, false);
  153.     
  154.     AddLabelPrefListener();
  155.  
  156.     FillLabelValues();
  157.  
  158.     refreshCustomMailViews(-1);
  159.   }
  160. }
  161.  
  162. function LaunchCustomizeDialog()
  163. {
  164.   // made it modal, see bug #191188
  165.   window.openDialog("chrome://messenger/content/mailViewList.xul", "mailnews:mailviewlist", "chrome,modal,titlebar,resizable,centerscreen", {onCloseCallback: refreshCustomMailViews});
  166. }
  167.  
  168. function LoadCustomMailView(index)
  169. {
  170.   prepareForViewChange();
  171.  
  172.   var searchTermsArrayForQS = CreateGroupedSearchTerms(gMailViewList.getMailViewAt(index).searchTerms);
  173.   createSearchTermsWithList(searchTermsArrayForQS);
  174.   AddVirtualFolderTerms(searchTermsArrayForQS);
  175.   gDefaultSearchViewTerms = searchTermsArrayForQS;
  176. }
  177.  
  178. function refreshCustomMailViews(aDefaultSelectedIndex)
  179. {
  180.   // for each mail view in the msg view list, add an entry in our combo box
  181.   if (!gMailViewList)
  182.     gMailViewList = Components.classes["@mozilla.org/messenger/mailviewlist;1"].getService(Components.interfaces.nsIMsgMailViewList);
  183.  
  184.   // remove any existing entries...
  185.   var menupopupNode = document.getElementById('viewPickerPopup');
  186.   for (var i = menupopupNode.childNodes.length - 1; i >= 0; --i)
  187.   {
  188.     if (menupopupNode.childNodes[i].id.substr(0, 15) == "userdefinedview")
  189.       menupopupNode.removeChild(menupopupNode.childNodes[i]);
  190.   }
  191.  
  192.   // now rebuild the list
  193.  
  194.   var numItems = gMailViewList.mailViewCount; 
  195.   var customNode = document.getElementById('createCustomViewSeparator');
  196.   var newMenuItem; 
  197.   var item; 
  198.   for (var index = 0; index < numItems; index++)
  199.   {
  200.     newMenuItem = document.createElement('menuitem');
  201.     newMenuItem.setAttribute('label', gMailViewList.getMailViewAt(index).prettyName);
  202.     newMenuItem.setAttribute('id', "userdefinedview" + (kLastDefaultViewIndex + index));
  203.     item = menupopupNode.insertBefore(newMenuItem, customNode);
  204.     item.setAttribute('value',  kLastDefaultViewIndex + index);
  205.   }
  206.  
  207.   if (!numItems)
  208.     customNode.setAttribute('collapsed', true);
  209.   else
  210.     customNode.removeAttribute('collapsed');
  211.  
  212.   if (aDefaultSelectedIndex >= 0)
  213.   {
  214.     ViewChangeByValue(kLastDefaultViewIndex + aDefaultSelectedIndex);
  215.   }
  216. }
  217.  
  218. function ViewChangeByValue(aValue)
  219. {
  220.   var viewPicker = document.getElementById('viewPicker');
  221.   if (aValue == -1)
  222.   {
  223.     viewPicker.selectedItem = null;
  224.     viewChange(viewPicker, -1);
  225.   }
  226.   else
  227.   {
  228.     viewPicker.selectedItem = viewPicker.getElementsByAttribute("value", aValue)[0];
  229.     viewChange(viewPicker, viewPicker.value);
  230.   }
  231. }
  232.  
  233. function FillLabelValues()
  234. {
  235.   for (var i = 1; i <= 5; i++)
  236.     setLabelAttributes(i, "labelMenuItem" + i);
  237. }
  238.  
  239. function setLabelAttributes(labelID, menuItemID)
  240. {
  241.   var prefString;
  242.   prefString = gPrefBranch.getComplexValue(kLabelPrefs + labelID, Components.interfaces.nsIPrefLocalizedString).data;
  243.   document.getElementById(menuItemID).setAttribute("label", prefString);
  244. }
  245.  
  246. function prepareForViewChange()
  247. {
  248.   // this is a problem - it saves the current view in gPreQuickSearchView
  249.   // then we eventually call onEnterInSearchBar, and we think we need to restore the pre search view!
  250.   initializeSearchBar();
  251.   ClearThreadPaneSelection();
  252.   ClearMessagePane();
  253. }
  254.  
  255. function ViewLabel(labelID)
  256. {
  257.   prepareForViewChange();
  258.  
  259.   // create an i supports array to store our search terms 
  260.   var searchTermsArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  261.  
  262.   var term = gSearchSession.createTerm();
  263.   var value = term.value;
  264.  
  265.   value.label = labelID;
  266.   value.attrib = nsMsgSearchAttrib.Label;
  267.   term.value = value;
  268.   term.attrib = nsMsgSearchAttrib.Label;
  269.   term.op = nsMsgSearchOp.Is;
  270.   term.booleanAnd = true;
  271.  
  272.   searchTermsArray.AppendElement(term);
  273.   AddVirtualFolderTerms(searchTermsArray);
  274.   createSearchTermsWithList(searchTermsArray);
  275.   gDefaultSearchViewTerms = searchTermsArray;
  276. }
  277.  
  278. function ViewNewMail()
  279. {
  280.   prepareForViewChange();
  281.  
  282.   // create an i supports array to store our search terms 
  283.   var searchTermsArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  284.  
  285.   var term = gSearchSession.createTerm();
  286.   var value = term.value;
  287.  
  288.   value.status = 1;
  289.   value.attrib = nsMsgSearchAttrib.MsgStatus;
  290.   term.value = value;
  291.   term.attrib = nsMsgSearchAttrib.MsgStatus;
  292.   term.op = nsMsgSearchOp.Isnt;
  293.   term.booleanAnd = true;
  294.   searchTermsArray.AppendElement(term);
  295.  
  296.   AddVirtualFolderTerms(searchTermsArray);
  297.  
  298.   createSearchTermsWithList(searchTermsArray);
  299.   // not quite right - these want to be just the view terms...but it might not matter.
  300.   gDefaultSearchViewTerms = searchTermsArray;
  301. }
  302.  
  303. function AddVirtualFolderTerms(searchTermsArray)
  304. {
  305.   // add in any virtual folder terms
  306.   var virtualFolderSearchTerms = (gVirtualFolderTerms || gXFVirtualFolderTerms);
  307.   if (virtualFolderSearchTerms)
  308.   {
  309.     var isupports = null;
  310.     var searchTerm; 
  311.     var termsArray = virtualFolderSearchTerms.QueryInterface(Components.interfaces.nsISupportsArray);
  312.     for (i = 0; i < termsArray.Count(); i++)
  313.     {
  314.       isupports = termsArray.GetElementAt(i);
  315.       searchTerm = isupports.QueryInterface(Components.interfaces.nsIMsgSearchTerm);
  316.       searchTermsArray.AppendElement(searchTerm);
  317.     }
  318.   }
  319. }
  320.  
  321.  
  322. window.addEventListener("load", viewPickerOnLoad, false);
  323.